package com.djinquan.common.facade;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * @Desc:
 * @Group:美的集团-营销系统-技术组
 * @Author dengjq15
 * @Date 2023/8/6
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RedissonLock {

    /** key的前缀,默认方法的全限定名,包名+方法名称 */
    String prefixKey() default "";

    /**
     * EL 表达式
     * @return
     */
    String key();

    /**
     * 等待时间,默认-1,不等待直接失败,redisson默认也是-1
     * 等待时间；在锁状态变为可持有之前，等待的时间，如果在这个时间内，锁一直被其他客户端线程持有，则放弃等待，返回失败；
     * @return
     */
    int waitTime() default -1;

    /**
     * 等待的时间单位,默认是秒
     * @return
     */
    TimeUnit unit() default TimeUnit.SECONDS;

    /**
     *持有时间；客户端获取到锁之后的最长持有时间，如果设置此参数为10秒，则10秒后，如果此客户端不释放锁，则有redis自行释放，以免造成死锁。
     */
    int leaseTime() default 0;
}
